상태 레지스터
보이기
상태 레지스터 또는 플래그 레지스터는 마이크로프로세서에서 다양한 산술 연산 결과의 상태를 알려주는 플래그 비트들이 모인 레지스터이다.
주로, 조건문과 같은 실행 순서의 분기에 사용된다.
상태 레지스터 플래그
[편집]상태 레지스터에는 다음과 같은 플래그들이 있다.
플래그 기호 | 이름 | 의미 |
---|---|---|
Z | 제로 플래그 | 연산 결과가 0일 경우에 참이 된다. |
C | 캐리 플래그 | 부호 없는 숫자의 연산 결과가 비트 범위를 넘어섰을 때 참이 된다. |
A | 보조 캐리 플래그 | 연산 결과 하위 니블(4bits)에서 비트 범위를 넘어섰을 때 참이 된다. 이진화 십진법(BCD) 연산에 사용된다. |
V / O / W | 오버플로 플래그 | 부호 있는 숫자의 연산 결과가 비트 범위를 넘어섰을 때 참이 된다. |
N / S | 네거티브 플래그, 사인 플래그 | 연산 결과가 음수일 때 참이 된다. |
I / E | 인터럽트 플래그 | 이 플래그가 참일 경우에만 인터럽트 요구를 받아들인다. 일반적으로 관리자 모드에서만 값을 변경 할 수 있다. |
P | 패리티 플래그 | 연산 결과에서 1로된 비트의 수가 짝수일 경우 참이 된다. |
D | 디렉션 플래그 | 문자열 조작에서 참일 경우 주소 레지스터 값이 자동으로 감소하고, 거짓일 경우 자동으로 증가한다. |
D / T | 디버그 플래그, 트랩 플래그 | 참일 경우 한 명령이 실행할 때마다 인터럽트가 발생한다. 디버깅에 사용된다. |
상태 레지스터의 구조
[편집]상태 레지스터의 구조는 프로세서의 설계에 따라 플래그의 기능이 약간씩 다를 수 있으며, 일부 아키텍처는 상태 레지스터가 존재하지 않는다.[1]
6502
[편집]플래그 바이트로 불리며, 크기는 8비트이다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
N | V | B | D | I | Z | C |
Z-80
[편집]7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
S | Z | H | P/V | N | C |
- Bit 4. Half-carry 플래그 : 이진화 십진법 변환 연산인 DAA와 같은 연산에서 사용.
- Bit 2. Parity / Overflow 플래그: (마지막) 연산이 (AND, OR, XOR와 같은) 8-bit 논리연산 혹은 shitf 연산이었다면 parity (0이면 odd), 산술계열 연산이었다면 overflow (1이면 overflow)를 나타냄.
- Bit 1. Negative 플래그 : (마지막) 연산이 빼기 계열의 연산 (SUB, SBC, DEC, CP)이면 1.
8086
[편집]플래그 레지스터로 불리며, 크기는 16비트이다.
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
O | D | I | T | S | Z | A | P | C |
- Bit 10. 디렉션 플래그